home *** CD-ROM | disk | FTP | other *** search
/ Let's Discover Tennessee! / Let's Discover Tennessee!.iso / pc / FILES / FUND.dxr / 00304_Pixelate.ls < prev    next >
Encoding:
Text File  |  2001-06-27  |  6.1 KB  |  130 lines

  1. property appearWhen, pixelateDuration, horizontalPixels, verticalPixels, minimumDim, spriteNum, mySprite, myStartFrame, myEndFrame, myOriginalMember, myOriginalImage, myTransitionMember, myAlphaMask, myPixelatedImage, mymultipliers
  2.  
  3. on beginSprite me
  4.   me.convertAppearance()
  5.   mySprite = sprite(spriteNum)
  6.   myOriginalMember = mySprite.member
  7.   case myOriginalMember.type of
  8.     #bitmap:
  9.       myOriginalImage = image(myOriginalMember.width, myOriginalMember.height, myOriginalMember.depth)
  10.       myOriginalImage = myOriginalMember.image
  11.       case myOriginalMember.depth of
  12.         32:
  13.           if myOriginalMember.useAlpha then
  14.             myOriginalAlpha = myOriginalMember.image.extractAlpha()
  15.           end if
  16.       end case
  17.     #text, #vectorShape, #flash:
  18.       if myOriginalMember.type = #text then
  19.         mySprite.rect = mySprite.rect
  20.       end if
  21.       myOriginalImage = image(myOriginalMember.width, myOriginalMember.height, 32)
  22.       if mySprite.ink = 0 then
  23.         case myOriginalMember.type of
  24.           #text, #flash:
  25.             myOriginalImage.fill(myOriginalImage.rect, myOriginalMember.bgColor)
  26.           #vectorShape:
  27.             myOriginalImage.fill(myOriginalImage.rect, myOriginalMember.backgroundColor)
  28.         end case
  29.         myOriginalImage.copyPixels(myOriginalMember.image, myOriginalMember.rect, myOriginalImage.rect, [#maskImage: myOriginalMember.image.extractAlpha()])
  30.       else
  31.         myOriginalImage = myOriginalMember.image
  32.       end if
  33.   end case
  34.   case appearWhen of
  35.     #start:
  36.       myStartFrame = mySprite.startFrame
  37.       myEndFrame = myStartFrame + pixelateDuration - 1
  38.     #end:
  39.       myEndFrame = mySprite.endFrame
  40.       myStartFrame = myEndFrame - pixelateDuration + 1
  41.   end case
  42.   myTransitionMember = new(#bitmap, castLib(mySprite.castLibNum))
  43.   myTransitionMember.image = image(myOriginalMember.width, myOriginalMember.height, 32, 8)
  44.   myTransitionMember.regPoint = myOriginalMember.regPoint
  45.   myTransitionMember.image.copyPixels(myOriginalImage, myOriginalMember.rect, myOriginalMember.rect)
  46.   if myOriginalImage.depth = 32 then
  47.     myTransitionMember.useAlpha = 1
  48.   end if
  49.   myPixelatedImage = image(myOriginalMember.width, myOriginalMember.height, myOriginalImage.depth, 0)
  50.   mymultipliers = me.generatepixelmults()
  51. end
  52.  
  53. on endSprite me
  54.   mySprite.member = myOriginalMember
  55.   erase(myTransitionMember)
  56. end
  57.  
  58. on prepareFrame me
  59.   if (the frame >= myStartFrame) and (the frame <= myEndFrame) then
  60.     elapsedFrames = the frame - myStartFrame + 1
  61.     if appearWhen = #end then
  62.       elapsedFrames = pixelateDuration - elapsedFrames
  63.     end if
  64.     currentHorzPixels = integer(minimumDim * power(mymultipliers.horz, elapsedFrames))
  65.     currentVertPixels = integer(minimumDim * power(mymultipliers.vert, elapsedFrames))
  66.     memberRect = myTransitionMember.rect
  67.     myPixelatedImage.fill(myPixelatedImage.rect, 0)
  68.     pixelatedRect = rect(0, 0, currentHorzPixels, currentVertPixels)
  69.     myPixelatedImage.copyPixels(myOriginalImage, pixelatedRect, memberRect)
  70.     myTransitionMember.image.copyPixels(myPixelatedImage, memberRect, pixelatedRect)
  71.     mySprite.member = myTransitionMember
  72.   else
  73.     mySprite.member = myOriginalMember
  74.   end if
  75. end
  76.  
  77. on convertAppearance me
  78.   case appearWhen of
  79.     "beginning of sprite":
  80.       appearWhen = #start
  81.     "end of sprite":
  82.       appearWhen = #end
  83.   end case
  84. end
  85.  
  86. on generatepixelmults me
  87.   multipliers = [:]
  88.   horzfactor = myOriginalMember.width / minimumDim / horizontalPixels
  89.   vertfactor = myOriginalMember.height / minimumDim / verticalPixels
  90.   multipliers[#horz] = power(horzfactor, 1.0 / (pixelateDuration - 1))
  91.   multipliers[#vert] = power(vertfactor, 1.0 / (pixelateDuration - 1))
  92.   return multipliers
  93. end
  94.  
  95. on isOKToAttach me, aSpriteType, aSpriteNum
  96.   isOK = 0
  97.   case aSpriteType of
  98.     #graphic:
  99.       case sprite(aSpriteNum).member.type of
  100.         #bitmap, #text, #flash, #vectorShape:
  101.           isOK = 1
  102.       end case
  103.   end case
  104.   return isOK
  105. end
  106.  
  107. on getPropertyDescriptionList me
  108.   props = [:]
  109.   props[#appearWhen] = [#comment: "When transition appears:", #format: #string, #default: "beginning of sprite", #range: ["beginning of sprite", "end of sprite"]]
  110.   firstFrame = sprite(the currentSpriteNum).startFrame
  111.   endFrame = sprite(the currentSpriteNum).endFrame
  112.   maxLength = endFrame - firstFrame + 1
  113.   maxWidth = sprite(the currentSpriteNum).member.width
  114.   maxHeight = sprite(the currentSpriteNum).member.height
  115.   maxDim = max(2, min(maxWidth, maxHeight) / 2)
  116.   props[#pixelateDuration] = [#comment: "Duration:", #format: #integer, #default: 10, #range: [#min: 1, #max: maxLength]]
  117.   props[#horizontalPixels] = [#comment: "Lowest Resolution (horizontal):", #format: #integer, #default: 3, #range: [#min: 2, #max: maxWidth]]
  118.   props[#verticalPixels] = [#comment: "Lowest Resolution (vertical):", #format: #integer, #default: 3, #range: [#min: 2, #max: maxHeight]]
  119.   props[#minimumDim] = [#comment: "Minimum pixel dimension:", #format: #integer, #default: 4, #range: [#min: 2, #max: maxDim]]
  120.   return props
  121. end
  122.  
  123. on getBehaviorTooltip
  124.   return "Creates a transition where the sprite resolves from or into a grid of low-resolution pixels."
  125. end
  126.  
  127. on getBehaviorDescription
  128.   return "PIXELATE TRANSITION" & RETURN & RETURN & "Drop this behavior onto a sprite to create an animation where the sprite transforms from a low-resolution to high-resolution image." & RETURN & RETURN & "Select when the transition will take effect. " & "The duration controls the number of frames over which the transition occurs. " & "The minimum number of pixels in both directions can also be controlled." & RETURN & RETURN & "When this transition is used during authoring, and the movie is stopped the cast member it uses for the transition effect may not be erased." & RETURN & RETURN & "PERMITTED MEMBER TYPES:" & RETURN & "bitmaps and text" & RETURN & RETURN & "PARAMETERS:" & RETURN & "* When transition appears - controls whether sprite moves on or off the stage" & RETURN & "* Duration - number of frames for the transition to take place" & RETURN & "* Horizontal Pixels - number of pixels at lowest resolution" & RETURN & "* Vertical Pixels - number of pixels at lowest resolution" & RETURN & "* Minimum Pixel Dimension - smallest edge length for a pixel during transition"
  129. end
  130.